﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using SOAPServicesUsu.Persistencia;
using SOAPServicesUsu.Dominio;
using SOAPServicesUsu.Excepciones;

namespace SOAPServicesUsu
{
    public class Usuarios : IUsuarios
    {

        private UsuarioDAO usuarioDAO = null;
        private UsuarioDAO UsuarioDAO
        {
            get
            {
                if (usuarioDAO == null)
                    usuarioDAO = new UsuarioDAO();
                return usuarioDAO;
            }

        }

        public Usuario CrearUsuario(string nombre, string apellido, string correo, string telefono, DateTime feinicio, DateTime fefinal, string cuenta, string password)
        {
            Usuario usuarioACrear = new Usuario()
            {
                Nombre = nombre,
                Apellido = apellido,
                Correo = correo,
                Telefono = telefono,
                FeInicio = feinicio,
                FeFinal = fefinal,
                Cuenta = cuenta,
                Password = password
            };

            return UsuarioDAO.Crear(usuarioACrear);
        }

        public Usuario ObtenerUsuario(int codigo)
        {
            return UsuarioDAO.Obtener(codigo);
        }

        public bool AutenticarUsuario(string cuenta,string password)
        {
            Boolean cuentaExiste = UsuarioDAO.VerificarCuenta(cuenta);
            if (cuentaExiste)
            {
                Boolean passwordCorrecto = UsuarioDAO.VerificarPassword(cuenta,password);
                if (passwordCorrecto)
                {
                    return passwordCorrecto;
                }
                else
                {
                    throw new FaultException<ValidationException>(new ValidationException() { ValidationError = "Inicio de Sesion Fallido" },
                        new FaultReason("Inicio de Sesion Fallido: Password incorrecto"));
                }
            }
            else
            {
                
                throw new FaultException<ValidationException>(new ValidationException() { ValidationError = "Inicio de Sesion Fallido" },
                    new FaultReason("Inicio de Sesion Fallido: Usuario no existe"));
            }
        }

        public Usuario ModificarUsuario(int codigo, string nombre, string apellido, string correo, string telefono, DateTime feinicio, DateTime fefinal, string cuenta, string password)
        {
            Usuario usuarioAModificar = new Usuario()
            {
                Codigo = codigo,
                Nombre = nombre,
                Apellido = apellido,
                Correo = correo,
                Telefono = telefono,
                FeInicio = feinicio,
                FeFinal = fefinal,
                Cuenta = cuenta,
                Password = password
            };
            return UsuarioDAO.Modificar(usuarioAModificar);
        }

        public void EliminarUsuario(int codigo)
        {
            Usuario usuarioExistente = UsuarioDAO.Obtener(codigo);
        }

        public List<Usuario> ListarUsuario()
        {
            return UsuarioDAO.ListarTodos().ToList();
        }

    }
}
